package scapi.utilerias;

import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EValidacion{
        /**
         * Metodo para validar que una cadena no este vacia
         * @param cadena
         * @param nombre
         * @return
         * @throws ExcepcionValidacion
         */
        public static String campoVacio(String cadena, String nombre) throws ExcepcionValidacion{
            if((cadena.length()==0))
			throw new ExcepcionValidacion("["+nombre+"] vacio");
            else return cadena;
        }

	/**
         * Metodo para validar que una cadena no este vacia y que no tenga espacios
         * @param cadena
         * @return
         * @throws ExcepcionValidacion
         */
        public static String vacio(String cadena) throws ExcepcionValidacion{
		if((cadena.length() <4))
			throw new ExcepcionValidacion("campo vacio o muy corto");
		else if(tieneEspacios(cadena))
			throw new ExcepcionValidacion("campo contiene espacios");
		
		return cadena;
	}

        /**
         * Metodo para validar que una cadena no este vacia y que no tenga espacios
         * @param cadena Cadena a ser validada
         * @param nombre Nombre de lo que se esta validando
         * @return
         * @throws ExcepcionValidacion
         */
	public static String vacio(String cadena, String nombre) throws ExcepcionValidacion{
		if((cadena.length() <4))
			throw new ExcepcionValidacion("["+nombre+"] campo vacio o muy corto");
		else if(tieneEspacios(cadena))
			throw new ExcepcionValidacion("campo contiene espacios");
		
		return cadena;
	}
	
	/**
         * Comprueba que una cadena o tenga espacios
         * @param cadena
         * @return
         */
        public static boolean tieneEspacios(String cadena){
		int contEsp = 0;
		for (int i = 0; i < cadena.length(); i++) {
			if(cadena.charAt(i) == ' ')
				contEsp++;
		}
		
		if(contEsp == cadena.length())
			return true;
		
		return false;
	}

	/**
         * Metodo que comprueba que una cadena no este vacia, y que tampoco contega numeros
         * @param cadena
         * @param nombre
         * @return
         * @throws ExcepcionValidacion
         */
	public static String cadena(String cadena, String nombre )throws ExcepcionValidacion{
		if(cadena.length() < 4)
			throw new ExcepcionValidacion("["+nombre+"] campo muy corto");
		
		for (int i = 0; i < cadena.length(); i++) {
			char caracter = cadena.charAt(i);
			if(!Character.isLetter(caracter) && !(caracter == ' '))
				throw new ExcepcionValidacion("["+nombre+"] campo invalido");
		}
		return cadena;
	}
	
	/**
         * Valida que dos password sean iguales
         * @param pas
         * @param repass
         * @return
         * @throws ExcepcionValidacion
         */
        public static String password(String pas, String repass) throws ExcepcionValidacion{
		String password = EValidacion.vacio(pas, "password");
		String repassword = EValidacion.vacio(repass, "rePassword");
		
		if(!password.equals(repassword))
			throw new ExcepcionValidacion("Los Password no coinciden");
		
		return pas;
	}
	
	/**
         * Valida que la fecha no supere la fecha actual
         * @param fecha
         * @return
         * @throws ExcepcionValidacion
         */
        public static Date fecha(Date fecha) throws ExcepcionValidacion{
		Date hoy = new Date();
		if(fecha.compareTo(hoy)>0){
			throw new ExcepcionValidacion("Enserio vienes del futuro");
        }
        if(fecha == null){
            throw new ExcepcionValidacion("Selecciona una Fecha");
        }
		return fecha;
	}
	
	/**
         * Valida que el año no revase el año actual
         * @param anio
         * @return
         * @throws ExcepcionValidacion
         */
        public static int anio(int anio) throws ExcepcionValidacion{
		if(anio >2009)
			throw new ExcepcionValidacion("[A�o] Enserio vienes del futuro");
		return anio;
	}
	
	/**
         * Valida que una cantidad sea un decimal valido
         * @param numero
         * @param mensaje
         * @return
         * @throws ExcepcionValidacion
         */
        public static float flotante(String numero, String mensaje) throws ExcepcionValidacion{
		float comprobado;
		try{
		comprobado = Float.parseFloat(numero);
		}catch (Exception e) {
			throw new ExcepcionValidacion("["+mensaje+"] campo invalido");
		}
		return comprobado;
	}
	
	/**
         * Valida que una cantidad sea un entero valido
         * @param entero
         * @param mensaje
         * @return
         * @throws ExcepcionValidacion
         */
        public static int entero(String entero, String mensaje) throws ExcepcionValidacion{
		int comprobado;
		try {
			comprobado = Integer.parseInt(entero);
		} catch (Exception e) {
			throw new ExcepcionValidacion("["+mensaje+"] campo invalido");
		}
		return comprobado;
	}

        public static int CP(String cp, String mensaje) throws ExcepcionValidacion{
		int comprobado;
		try {
                    comprobado = Integer.parseInt(cp);
		} catch (Exception e) {
			throw new ExcepcionValidacion("["+mensaje+"] campo invalido");
		}
                if (comprobado < 1000000)
                    return comprobado;
                else
                    throw new ExcepcionValidacion("["+mensaje+"] campo invalido");
	}

        public static int LADA(String lada, String mensaje) throws ExcepcionValidacion{
		int comprobado;
		try {
                    comprobado = Integer.parseInt(lada);
		} catch (Exception e) {
			throw new ExcepcionValidacion("["+mensaje+"] campo invalido");
		}
                if (comprobado < 1000)
                    return comprobado;
                else
                    throw new ExcepcionValidacion("["+mensaje+"] campo invalido");
	}

	/**
         * Valida que la direccion de email sea valida
         * @param correo
         * @param mensaje
         * @return
         * @throws ExcepcionValidacion
         */
        public static String email(String correo, String mensaje) throws ExcepcionValidacion {
		Pattern pat = null;
        Matcher mat = null;        
        pat = Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+([a-zA-Z]{2,9}.)+[a-zA-Z]{2,3})$");
        mat = pat.matcher(correo);
        if (mat.find()) {
            System.out.println("[" + mat.group() + "]");
            return correo;
        }else{
            throw new ExcepcionValidacion("["+mensaje+"] debe ser una direccion valida");
        }     
	}

	/**
         * Valida que un curp sea vaido
         * @param curp
         * @param mensaje
         * @return
         * @throws ExcepcionValidacion
         */
        public static String CURP(String curp, String mensaje) throws ExcepcionValidacion {
		if(curp.length() < 16)
			throw new ExcepcionValidacion("["+mensaje+"] demasiado corto");     
		
	
		
		return curp;

	}

	/**
         * Valida que un RFC sea valido
         * @param rfc
         * @param mensaje
         * @return
         * @throws ExcepcionValidacion
         */
        public static String RFC(String rfc, String mensaje) throws ExcepcionValidacion {
		if(rfc.length() < 10)
			throw new ExcepcionValidacion("["+mensaje+"] demasiado corto");     
		return rfc;
	}

        //Valida que el numero no sea vacio y que sea numero
        public static  int numeroCorrecto(String numero, String campo) throws ExcepcionValidacion{
            String cadena1 = EValidacion.campoVacio( numero, campo);
            return  EValidacion.entero(cadena1,campo);
        }
        //Valida que la cadena no sea vacia y no contenga numeros
        public static String cadenaCorrecta(String cadena, String campo) throws ExcepcionValidacion{
        String cadena1 = EValidacion.campoVacio(cadena, campo);
        return EValidacion.cadena(cadena1,campo);
        }

        //Valida telefono mayor a 8 digitos
        public static int telefono(String telefono, String nombre) throws ExcepcionValidacion{
            if(telefono.length() != 8)
			throw new ExcepcionValidacion("["+nombre+"] numero invalido");
            else{
                int numero = EValidacion.entero(telefono,nombre);
                return numero;}
        }

       // public static

}
